{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对用户进行聚类\n",
    "数据来源于Kaggle竞赛：Event Recommendation Engine Challenge，根据 events they’ve responded to in the past user demographic information what events they’ve seen and clicked on in our app 用户对某个事件是否感兴趣\n",
    "竞赛官网： https://www.kaggle.com/c/event-recommendation-engine-challenge/data\n",
    "由于用户众多（3w+），可以对用户进行聚类 事件描述信息在users.csv文件：共110维特征 user_id locale：地区，语言 birthyear：出身年 gender：性别 joinedAt：用户加入APP的时间，ISO-8601 UTC time location：地点 timezone：时区\n",
    "作业要求： 根据用户的属性进行聚类（KMeans聚类） 尝试K=20， 40， 80，并计算各自CH_scores。\n",
    "提示：由于样本数目较多，建议使用MiniBatchKMeans。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.cluster import MiniBatchKMeans #批量均值处理\n",
    "from sklearn.model_selection import train_test_split #切分训练集合测试集\n",
    "from sklearn import metrics\n",
    "\n",
    "from sklearn.decomposition import PCA # 降维\n",
    "import time\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>locale</th>\n",
       "      <th>birthyear</th>\n",
       "      <th>gender</th>\n",
       "      <th>joinedAt</th>\n",
       "      <th>location</th>\n",
       "      <th>timezone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3197468391</td>\n",
       "      <td>id_ID</td>\n",
       "      <td>1993</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-10-02T06:40:55.524Z</td>\n",
       "      <td>Medan  Indonesia</td>\n",
       "      <td>480.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3537982273</td>\n",
       "      <td>id_ID</td>\n",
       "      <td>1992</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-09-29T18:03:12.111Z</td>\n",
       "      <td>Medan  Indonesia</td>\n",
       "      <td>420.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>823183725</td>\n",
       "      <td>en_US</td>\n",
       "      <td>1975</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-10-06T03:14:07.149Z</td>\n",
       "      <td>Stratford  Ontario</td>\n",
       "      <td>-240.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1872223848</td>\n",
       "      <td>en_US</td>\n",
       "      <td>1991</td>\n",
       "      <td>female</td>\n",
       "      <td>2012-11-04T08:59:43.783Z</td>\n",
       "      <td>Tehran  Iran</td>\n",
       "      <td>210.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3429017717</td>\n",
       "      <td>id_ID</td>\n",
       "      <td>1995</td>\n",
       "      <td>female</td>\n",
       "      <td>2012-09-10T16:06:53.132Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>420.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      user_id locale birthyear  gender                  joinedAt  \\\n",
       "0  3197468391  id_ID      1993    male  2012-10-02T06:40:55.524Z   \n",
       "1  3537982273  id_ID      1992    male  2012-09-29T18:03:12.111Z   \n",
       "2   823183725  en_US      1975    male  2012-10-06T03:14:07.149Z   \n",
       "3  1872223848  en_US      1991  female  2012-11-04T08:59:43.783Z   \n",
       "4  3429017717  id_ID      1995  female  2012-09-10T16:06:53.132Z   \n",
       "\n",
       "             location  timezone  \n",
       "0    Medan  Indonesia     480.0  \n",
       "1    Medan  Indonesia     420.0  \n",
       "2  Stratford  Ontario    -240.0  \n",
       "3        Tehran  Iran     210.0  \n",
       "4                 NaN     420.0  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train = pd.read_csv(\"./users.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 38209 entries, 0 to 38208\n",
      "Data columns (total 7 columns):\n",
      "user_id      38209 non-null int64\n",
      "locale       38209 non-null object\n",
      "birthyear    38209 non-null object\n",
      "gender       38100 non-null object\n",
      "joinedAt     38152 non-null object\n",
      "location     32745 non-null object\n",
      "timezone     37773 non-null float64\n",
      "dtypes: float64(1), int64(1), object(5)\n",
      "memory usage: 2.0+ MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 共7维数据，有缺失值需要进行特征工程和预处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38209"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_records = train.shape[0]\n",
    "n_records"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#并统计有多少不同的users（n_users）\n",
    "def get_uniqueUsers():\n",
    "    uniqueUsers = set()\n",
    "    \n",
    "    for i in range(n_records):\n",
    "        uniqueUsers.add(train.loc[i,'user_id'])\n",
    "    \n",
    "    n_events = len(uniqueUsers)\n",
    "    return n_events\n",
    "\n",
    "n_users = get_uniqueUsers()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38209"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_users"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "没有重复的用户数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "userId = train[\"user_id\"]\n",
    "#user_id不作为聚类属性\n",
    "train = train.drop([\"user_id\"], axis=1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 去掉user_id"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 填补缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "male      23242\n",
       "female    14858\n",
       "Name: gender, dtype: int64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train[\"gender\"].value_counts()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 男性样本比女性多很多，所以将缺失值定位女性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "male      23242\n",
       "female    14967\n",
       "Name: gender, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train[\"gender\"] =train[\"gender\"].fillna(\"female\");\n",
    "train[\"gender\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#特征编码\n",
    "import datetime\n",
    "import hashlib\n",
    "import locale\n",
    "\n",
    "from collections import defaultdict\n",
    "from sklearn.preprocessing import normalize\n",
    "\n",
    "class FeatureEng:\n",
    "    def __init__(self):\n",
    "         # 载入 locales\n",
    "        self.localeIdMap = defaultdict(int)\n",
    "        for i, l in enumerate(locale.locale_alias.keys()):\n",
    "          self.localeIdMap[l] = i + 1\n",
    "        \n",
    "        # 载入 gender id 字典\n",
    "        ##缺失补0\n",
    "        self.genderIdMap = defaultdict(int, {'NaN': 0, \"male\":1, \"female\":2})\n",
    "\n",
    "  \n",
    "    def getLocaleId(self, locstr):\n",
    "        return self.localeIdMap[locstr.lower()]\n",
    "\n",
    "    def getGenderId(self, genderStr):\n",
    "        return self.genderIdMap[genderStr]\n",
    "\n",
    "    def getJoinedYearMonth(self, dateString):\n",
    "        try:\n",
    "            dttm = datetime.datetime.strptime(dateString, \"%Y-%m-%dT%H:%M:%S.%fZ\")\n",
    "            #return \"\".join([str(dttm.year), str(dttm.month)])\n",
    "            return (dttm.year-2010)*12 + dttm.month\n",
    "        except:  #缺失补0\n",
    "          return 0\n",
    "\n",
    "    def getBirthYearInt(self, birthYear):\n",
    "        #缺失补0\n",
    "        try:\n",
    "          return 0 if birthYear == \"None\" else int(birthYear)\n",
    "        except:\n",
    "          return 0\n",
    "\n",
    "    def getTimezoneInt(self, timezone):\n",
    "        try:\n",
    "          return int(timezone)\n",
    "        except:  #缺失值处理\n",
    "          return 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "FE = FeatureEng()\n",
    "\n",
    "cols = ['LocaleId', 'BirthYearInt', 'GenderId', 'JoinedYearMonth', 'TimezoneInt']\n",
    "n_cols = len(cols)\n",
    "userMatrix = np.zeros((train.shape[0],n_cols), dtype=np.int)\n",
    "\n",
    "for i in range(train.shape[0]): \n",
    "    userMatrix[i, 0] = FE.getLocaleId(train.loc[i,'locale'])\n",
    "    userMatrix[i, 1] = FE.getBirthYearInt(train.loc[i,'birthyear'])\n",
    "    userMatrix[i, 2] = FE.getGenderId(train.loc[i,'gender'])\n",
    "    userMatrix[i, 3] = FE.getJoinedYearMonth(train.loc[i,'joinedAt'])\n",
    "    userMatrix[i, 4] = FE.getTimezoneInt(train.loc[i,'timezone'])\n",
    "\n",
    "# 归一化用户矩阵\n",
    "userMatrix = normalize(userMatrix, norm=\"l1\", axis=0, copy=False)\n",
    "\n",
    "df_FE = pd.DataFrame(data=userMatrix, columns=cols)  \n",
    "#mmwrite(\"US_userMatrix\", userMatrix)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>LocaleId</th>\n",
       "      <th>BirthYearInt</th>\n",
       "      <th>GenderId</th>\n",
       "      <th>JoinedYearMonth</th>\n",
       "      <th>TimezoneInt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   LocaleId  BirthYearInt  GenderId  JoinedYearMonth  TimezoneInt\n",
       "0  0.000036      0.000027  0.000019         0.000026     0.000036\n",
       "1  0.000036      0.000027  0.000019         0.000026     0.000031\n",
       "2  0.000020      0.000027  0.000019         0.000026    -0.000018\n",
       "3  0.000020      0.000027  0.000038         0.000027     0.000016\n",
       "4  0.000036      0.000027  0.000038         0.000026     0.000031"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_FE.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 38209 entries, 0 to 38208\n",
      "Data columns (total 5 columns):\n",
      "LocaleId           38209 non-null float64\n",
      "BirthYearInt       38209 non-null float64\n",
      "GenderId           38209 non-null float64\n",
      "JoinedYearMonth    38209 non-null float64\n",
      "TimezoneInt        38209 non-null float64\n",
      "dtypes: float64(5)\n",
      "memory usage: 1.5 MB\n"
     ]
    }
   ],
   "source": [
    "df_FE.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  3.64938815e-05,   2.72952090e-05,   1.88054762e-05,\n",
       "          2.63776708e-05,   3.55743704e-05],\n",
       "       [  3.64938815e-05,   2.72815135e-05,   1.88054762e-05,\n",
       "          2.56018570e-05,   3.11275741e-05],\n",
       "       [  2.01754792e-05,   2.70486893e-05,   1.88054762e-05,\n",
       "          2.63776708e-05,  -1.77871852e-05],\n",
       "       ..., \n",
       "       [  3.64938815e-05,   2.73226001e-05,   1.88054762e-05,\n",
       "          2.63776708e-05,   3.11275741e-05],\n",
       "       [  2.01754792e-05,   2.72404268e-05,   1.88054762e-05,\n",
       "          2.63776708e-05,   3.11275741e-05],\n",
       "       [  2.01754792e-05,   2.71171670e-05,   1.88054762e-05,\n",
       "          2.71534847e-05,  -3.55743704e-05]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_FE.values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 开始聚类 因为维数太少，所以不用进行PCA降维"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def K_cluster_analysis(K, X_train):\n",
    "    start = time.time()\n",
    "    \n",
    "    print(\"K-means begin with clusters: {}\".format(K));\n",
    "    #K-means,在训练集上训练\n",
    "    mb_kmeans = MiniBatchKMeans(n_clusters=K)\n",
    "    mb_kmeans.fit(X_train)\n",
    "    \n",
    "    y_pred = mb_kmeans.predict(X_train)\n",
    "    # K值的评估标准\n",
    "    #常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index\n",
    "    #这两个分数值越大则聚类效果越好\n",
    "    CH_score = metrics.calinski_harabaz_score(X_train,y_pred)\n",
    "    SH_score = metrics.silhouette_score(X_train,labels=y_pred)\n",
    "    end = time.time()\n",
    "    print(\"CH_score: {}, time elaps:{}\".format(CH_score, int(end-start)))\n",
    "    print(\"SH_score: {}, time elaps:{}\".format(SH_score, int(end-start)))\n",
    "    \n",
    "    return CH_score,SH_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K-means begin with clusters: 20\n",
      "CH_score: 18672.807998040054, time elaps:14\n",
      "SH_score: 0.6584390969767298, time elaps:14\n",
      "K-means begin with clusters: 30\n",
      "CH_score: 24421.766262930112, time elaps:12\n",
      "SH_score: 0.7207379053436456, time elaps:12\n",
      "K-means begin with clusters: 40\n",
      "CH_score: 23470.000927412693, time elaps:12\n",
      "SH_score: 0.717324239058428, time elaps:12\n",
      "K-means begin with clusters: 50\n",
      "CH_score: 19131.46420166146, time elaps:12\n",
      "SH_score: 0.6100149197954643, time elaps:12\n",
      "K-means begin with clusters: 60\n",
      "CH_score: 18046.303246990632, time elaps:13\n",
      "SH_score: 0.6523858184456595, time elaps:13\n",
      "K-means begin with clusters: 70\n",
      "CH_score: 17866.33048234496, time elaps:12\n",
      "SH_score: 0.6340365177389147, time elaps:12\n",
      "K-means begin with clusters: 80\n",
      "CH_score: 17185.852262732315, time elaps:12\n",
      "SH_score: 0.644047735273751, time elaps:12\n"
     ]
    }
   ],
   "source": [
    "# 设置超参数（聚类数目K）搜索范围\n",
    "Ks = [20,30,40,50,60,70,80]\n",
    "CH_scores = [] #CHs索引\n",
    "SH_score = [] #轮廓系数\n",
    "for K in Ks:\n",
    "    ch,sh = K_cluster_analysis(K, df_FE.values[:20000]) #因为数目太大了所以选择2W的数据来运算\n",
    "    CH_scores.append(ch)\n",
    "    SH_score.append(sh)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "聚类的运算时间不在模型训练上而是评分上， CH的话运算时间很短，而轮廓系数则评分时间很长而且内存占用很大，数据量超过一定数目就会直接报错 所以根据自己电脑性能选择了2W的数据来运算！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0xc59be10>]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\njxUHY4wx5/n/XPKYyZjeHeoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc1be358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘画CH评分模型\n",
    "plt.plot(Ks,np.array(CH_scores))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以CH算法来评分的话当K为30时，分数最高"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0xd19df98>]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD8CAYAAACb4nSYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xd4XOWZ9/HvPerFssrItopllZEb\nbhjhNrIpAWIIYBIgQAqBTWx208OGBLJsQshmN6QnG94EQ0KWhECotgEH4wWCe5Fxl5sky1az1SVb\nxSrzvH/MmBWKbY3kkc6U+3Nduqw5ekZzP9bod0b3nPMcMcaglFIqNNisLkAppdTI0dBXSqkQoqGv\nlFIhRENfKaVCiIa+UkqFEA19pZQKIRr6SikVQjT0lVIqhGjoK6VUCAm3uoD+7Ha7yc7OtroMpZQK\nKDt27Kg3xqQONM7vQj87O5uioiKry1BKqYAiIse8GaftHaWUCiEa+kopFUI09JVSKoRo6CulVAjR\n0FdKqRCioa+UUiHEq9AXkcUickhESkTkwXN8/RcissvzcVhEmj3bZ4nIZhHZLyJ7ROQOX09AKaWU\n9wY8Tl9EwoDHgWuBSmC7iKwyxhSfHWOM+Uaf8V8BLvXcbAfuNsYcEZF0YIeIrDHGNPtyEsGmpb2b\nv2w7TkpcJBlJMWQkxpCWGE1UeJjVpSmlApw3J2fNAUqMMWUAIvI8sAQoPs/4u4DvARhjDp/daIyp\nFpFaIBXQ0L+A37x7hCfXH/2H7amjoshIjCEjKYbMxBjSE2M+uJ2RFENCdIQF1SqlAok3oZ8BVPS5\nXQnMPddAEZkA5ADvnONrc4BIoHTwZYaO1s5unttWwY0z0vjWRydT2dxOdXMnVU0dVDW3U9XcQXF1\nK2uLT9LV4/rQfUdFhX/wl0FG0od3CpmJMdjjo7DZxKKZKaX8gTehf66UMOcZeyfwkjGm90PfQCQN\n+BPwOWOMq/+dRGQZsAwgKyvLi5KC11+2Huf0mR7++Yo8slJiyUqJPec4l8tQ33aGqqYO906hud2z\nY+igsqmD7eWNtHb2fOg+kWE20hKj3TuCPjuGTM/naaNjiAzX9/aVCmbehH4lML7P7Uyg+jxj7wS+\n1HeDiCQAbwAPG2O2nOtOxpjlwHKAgoKC8+1Qgl5Xj4unNx7F6UhhWsboC4612YQxo6IZMyqaS8+z\nnzzV2U1Vc4dnx9BBpefzquYO1h2po/bUGUyf/20RSI2P+tBfC313EBmJMYzSFpJSAc2b0N8O5ItI\nDlCFO9g/1X+QiEwCkoDNfbZFAq8CzxhjXvRJxUFs1e5qTrae4bFbZ/jk+42KjmDyuAgmj0s459fP\n9PRyoqXzgx1BVZ+dwr6qFt7af5Ku3n4tpOhwMhJjyPTsBNL77hySYrDHaQtJKX82YOgbY3pE5MvA\nGiAM+IMxZr+IPAoUGWNWeYbeBTxvTN/XjnwSWASkiMg9nm33GGN2+WwGQcIYw5Prypg8bhRXTBxw\ndVSfiAoPY0JKHBNS4s75dZfLUH/6DJXN7r8UPtg5NLlbSFuPNnKqfwsp3Eb66OgPdgTpiTE4HXYu\nz04eiSkppQYgH85o6xUUFJhQXFr53UO13Pv0dn52+0xuvSzT6nK81trZ7d4ZNHVQ3eLZIfRpKdWe\nOsPomAje//drCdO/AJQaNiKywxhTMNA4v1tPP1Q9ua6McQnR3DQz3epSBiUhOoKEtAimpJ27hbRy\nVxVfe34X+6tbmJGZOMLVKaX600M1/MC+qhY2lTZwrzM76I6eWZBnB2BDSb3FlSilQEPfLzyxroz4\nqHDumht8h6umjopi8rhRbNTQV8ovaOhbrKKxndV7a/jU3KygPaPW6bCzvbyJzu7egQcrpYaVhr7F\n/rDxKALc68y2upRhU+iw09Xjoqi8yepSlAp5GvoWamnv5q/bK7h5Vjppo2OsLmfYzMlJJtwmbCzV\nFo9SVtPQt9Cftx6jvauXpQtzrS5lWMVFhXNpVqL29ZXyAxr6Funs7uXpjeUsmph63sMdg4nTYWdv\nVQvN7V1Wl6JUSNPQt8jKXVXUnz7DfYuC+1X+WYUOO8bA5tIGq0tRKqRp6FvA5TIsX1fGJekJLMhL\nsbqcETFzfCJxkWF6vL5SFtPQt8A7B2sprWtj2aJcREJjaYKIMBvzclPYpK/0lbKUhr4Flq8rIyMx\nhhump1ldyoha4LBztL6NyqZ2q0tRKmRp6I+wnceb2FbeyD8V5hARFlr//YUO95IMm0r01b5SVgmt\n1PEDT64vIyE6nDsuHz/w4CAzcWw89vgo7esrZSEN/RF0rKGNN/ed4NPzJhAfFXoLnIoIhY4UNpXW\n429LeisVKjT0R9BT648SbrNx74Jsq0uxzAKHnfrTXRw6ecrqUpQKSRr6I6SxrYsXd1Rwy6XpjEmI\ntrocyzg9ff0NR7TFo5QVNPRHyJ82H6Oz2xX0Sy4MJCMxhlx7nC7JoJRFNPRHQGd3L89sLufqyWPI\nHzvK6nIs53TY2Xq0ka4e18CDlVI+paE/Al7aUUlDWxfLQmTJhYE4HXbau3rZXdlsdSlKhRwN/WHW\n6zI8tb6MmZmjmZuTbHU5fmF+bgo20b6+UlbQ0B9ma4tPUt7QzrJFeSGz5MJARsdGMD1jtPb1lbKA\nhv4wW76ulPHJMSyeNs7qUvyK02FnZ0Uzpzq7rS5FqZCioT+Misobef94M18ozCXMpq/y+yp02Ol1\nGbYdbbS6FKVCiob+MHpiXRmJsRHcXpBpdSl+Z/aEJKLCbWzUdXiUGlEa+sOktO40/3vgJHfPm0Bs\nZOgtuTCQ6IgwLs9O1r6+UiNMQ3+YPLX+KBFhNu4O4SUXBuJ02Dl08hS1pzqtLkWpkOFV6IvIYhE5\nJCIlIvLgOb7+CxHZ5fk4LCLNfb72ORE54vn4nC+L91d1p87w8vuV3Do7E3t8lNXl+C1dalmpkTdg\n6ItIGPA4cD0wFbhLRKb2HWOM+YYxZpYxZhbw38ArnvsmA98D5gJzgO+JSJJvp+B/ntlcTnevi6UL\nc6wuxa9NTU8gMTZCl1pWagR580p/DlBijCkzxnQBzwNLLjD+LuA5z+cfBdYaYxqNMU3AWmDxxRTs\n79q7evjTlmNcO2UsuanxVpfj18JswvzcFDaV6FLLSo0Ub0I/A6joc7vSs+0fiMgEIAd4ZzD3FZFl\nIlIkIkV1dXXe1O23XiyqpLm9m/uu0CUXvOF02Klu6eRofZvVpSgVErwJ/XMdYH6+l2V3Ai8ZY3oH\nc19jzHJjTIExpiA1NdWLkvxTT6+LpzaUMTsrkcsm6JIL3jjb19ejeJQaGd6EfiXQ99p+mUD1ecbe\nyf+1dgZ734D35v4TVDR2sGxRntWlBIwJKbFkJMZoX1+pEeJN6G8H8kUkR0QicQf7qv6DRGQSkARs\n7rN5DXCdiCR53sC9zrMt6BhjWL6ujBx7HNdOHWt1OQHDfQlFO5tLG+h1aV9fqeE2YOgbY3qAL+MO\n6wPAC8aY/SLyqIjc3GfoXcDzps87csaYRuAHuHcc24FHPduCztajjeypbOELC3N0yYVBWuBIobWz\nh31VLVaXolTQ8+pUUWPMamB1v23f7Xf7kfPc9w/AH4ZYX8BYvq6MlLhIbp2tSy4M1oI8zyUUS+qZ\nOT7R4mqUCm56Rq4PHDl5incO1nL3/GyiI8KsLifgpI6KYvK4UfpmrlIjQEPfB5avKyM6wsZn50+w\nupSAVeiwU3Ssic7u3oEHK6WGTEP/ItW2drJiVxWfLBhPclyk1eUELGe+na4eF0XlTVaXolRQ09C/\nSE9vKqfXZfh8oS65cDHmZCcTbhM9dFOpYaahfxFOn+nhz1uOsXjaOCakxFldTkCLiwpndlaS9vWV\nGmYa+hfh+W3HOdXZoydj+YjTYWdfdQtNbV1Wl6JU0NLQH6LuXhdPbyxnTk4ys/QwQ58ozE/BGNhc\npkstKzVcNPSHaPXeGqqaO7hvkS6s5iszMhOJjwrXFo9Sw0hDfwiMMTzxXhl5qXFcNWmM1eUEjYgw\nG3Nz9BKKSg0nDf0h2FjSQHFNK8sW5WLTJRd8yumwU97QTkVju9WlKBWUNPSHYPn6MlJHRXHLpee8\nrIC6CIX5nksoluqrfaWGg4b+IB2oaWXd4TruWZBNVLguueBr+WPiSR0VxUa9bq5Sw0JDf5CeXFdG\nbGQYn5mrSy4MBxHBmZfCxpJ6XLrUslI+p6E/CNXNHazaXc0dl49ndGyE1eUELafDTkNbF4dOnrK6\nFKWCjob+IPxxUzkGdMmFYebUSygqNWw09L3U2tnNX7Ye52PT08hMirW6nKCWnhhDbmqcrsOj1DDQ\n0PfSc1uPc/pMD8v0ZKwRUeiws+1oI109LqtLUSqoaOh7oavHveTCgrwUpmWMtrqckLAgz057Vy+7\nKpqtLkWpoKKh74VVu6s50dqpr/JH0PzcFGyCtniU8jEN/QEYY3hyXRmTx43iiompVpcTMkbHRjA9\nM1HfzFXKxzT0B/De4ToOnTzF0oW5iOiSCyOp0JHCropmTnV2W12KUkFDQ38Ay9eVMS4hmptmpltd\nSshxOuz0ugzbjjZaXYpSQUND/wL2VbWwqbSBe53ZRIbrf9VIm52VRFS4Tfv6SvmQJtkFLF9XRnxU\nOHfNzbK6lJAUHRHGHF1qWSmf0tA/j8qmdt7YW8On5maREK1LLljF6bBz+ORpals7rS5FqaCgoX8e\nv99wFAHuWZBtdSkhrfDskgy61LJSPuFV6IvIYhE5JCIlIvLgecZ8UkSKRWS/iPylz/Yfe7YdEJFf\nSwAcAtPS3s1ft1dw88x00hNjrC4npE1NSyAxNkKXWlbKR8IHGiAiYcDjwLVAJbBdRFYZY4r7jMkH\nHgKcxpgmERnj2b4AcAIzPEM3AFcAf/flJHztz1uP0d7Vy1I9GctyNpuwwLPUsjFGD5tV6iJ580p/\nDlBijCkzxnQBzwNL+o1ZCjxujGkCMMbUerYbIBqIBKKACOCkLwofLmd6evnjpnIWTUxlSlqC1eUo\n3H39mpZOyurbrC5FqYDnTehnABV9bld6tvU1EZgoIhtFZIuILAYwxmwG3gVqPB9rjDEHLr7s4bNi\nZxV1p86wbKG+yvcXhbrUslI+403on+vv6f6XNAoH8oErgbuAp0QkUUQcwBQgE/eO4moRWfQPDyCy\nTESKRKSorq5uMPX7lMtlWL6ujKlpCTgdKZbVoT4sKzmWzKQYDX2lfMCb0K8Exve5nQlUn2PMSmNM\ntzHmKHAI907g48AWY8xpY8xp4G/AvP4PYIxZbowpMMYUpKZat77Nu4dqKa1r474rdMkFf+K+hKKd\nTaUN9OolFJW6KN6E/nYgX0RyRCQSuBNY1W/MCuAqABGx4273lAHHgStEJFxEInC/ieu37Z0n1pWR\nkRjDDdPTrC5F9ePMt3Oqs4e9VS1Wl6JUQBsw9I0xPcCXgTW4A/sFY8x+EXlURG72DFsDNIhIMe4e\n/gPGmAbgJaAU2AvsBnYbY14bhnlctF0VzWw72sg/FeYQEaanL/ibBXnudpu2eJS6OAMesglgjFkN\nrO637bt9PjfA/Z6PvmN6gfsuvszht3xdKaOiw7nj8vEDD1Yjzh4fxZS0BDYcqedLVzmsLkepgKUv\naYFjDW28ue8En5k3gfgor/aDygKFjhR2HGuio6vX6lKUClga+riXXAi32bhXl1zwawscdrp6XRQd\n06WWlRqqkA/9xrYuXiiq4JZL0xmTEG11OeoC5mQnExEmutSyUhch5EP/T5uP0dntYqmejOX34qLC\nuTQrSd/MVeoihHTod3b38szmcq6ePIb8saOsLkd5odBhZ391K01tXVaXolRACunQf/n9Shraulim\nC6sFDKcjBWNgc5muuqnUUIRs6Pe6DE+tP8rMzNHMzUm2uhzlpRmZicRHhWtfX6khCtnQX1t8kqP1\nbSxdpEsuBJKIMBvzcvUSikoNVciG/vJ1pYxPjmHxJeOsLkUNktNh51hDOxWN7VaXolTACcnQ33Gs\nkfePN/OFwlzCdcmFgHN2qeVNeglFpQYtJBPviffKSIyN4PaCTKtLUUPgGBPPmFFRbNBLKCo1aCEX\n+mV1p1l74CR3z5tAbKQuuRCIRASnw86mknpcutSyUoMScqH/5PqjRITZ+Oz8bKtLURfB6bDT0NbF\nwROnrC5FqYASUqFff/oML79fya2zM0kdFWV1OeoinL2ymR7Fo9TghFToP7OpnO5eF0sX5lhdirpI\naaNjyEuNY6O+mavUoIRM6Ld39fDMlmNcO2UsuanxVpejfMDpsLO1rJGuHpfVpSgVMEIm9F8sqqS5\nvVuXXAgiToedju5edh5vsroUpQJGSIR+r8vw1IYyZmclUpCtSy4Ei3m5KdhE+/pKDUZIhP6b+05Q\n0djBskV5VpeifGh0TAQzMhN1HR6lBiHoQ98Yw/J1peTY47h26liry1E+5nSksLuyhVOd3VaXolRA\nCPrQ33q0kd2VLXy+MIcwmy6sFmycDju9LsPWMr2EolLeCPrQX76ujJS4SG67TJdcCEazs5KIjrBp\ni0cpLwV16B85eYp3DtZy9/xsoiPCrC5HDYPoiDAuz9allpXyVlCH/pPry4iOsPHZ+ROsLkUNo0KH\nnSO1p6lt7bS6FKX8XtCGfm1rJyt2VnP7ZeNJjou0uhw1jJyepZb17FylBha0of/0pnJ6XC6+oEsu\nBL2paQkkxkaw4YgutazUQIIy9E+f6eHZLcdYPG0cE1LirC5HDTObTXDm2dlYUo8xutSyUhfiVeiL\nyGIROSQiJSLy4HnGfFJEikVkv4j8pc/2LBF5S0QOeL6e7ZvSz++v2yto7ezRk7FCiNNh50RrJ6V1\nbVaXopRfG/AqIiISBjwOXAtUAttFZJUxprjPmHzgIcBpjGkSkTF9vsUzwA+NMWtFJB4Y1tWxuntd\n/GHDUebkJDNrfOJwPpTyI30voegYowvqKXU+3rzSnwOUGGPKjDFdwPPAkn5jlgKPG2OaAIwxtQAi\nMhUIN8as9Ww/bYwZ1qtZr95bQ1VzB8sW6sJqoSQrJZbMpBg2HNE3c5W6EG9CPwOo6HO70rOtr4nA\nRBHZKCJbRGRxn+3NIvKKiOwUkZ94/nIYFu4lF8rIS43j6sljBr6DCiqFDjubyxro6dWllpU6H29C\n/1xrF/R/tywcyAeuBO4CnhKRRM/2hcA3gcuBXOCef3gAkWUiUiQiRXV1dV4X39+m0gb2V7eybFEu\nNl1yIeQ4HXZOdfawt6rF6lKU8lvehH4lML7P7Uyg+hxjVhpjuo0xR4FDuHcClcBOT2uoB1gBzO7/\nAMaY5caYAmNMQWpq6lDmAcAT68qwx0dxy6X9/xBRoWBBnl5CUamBeBP624F8EckRkUjgTmBVvzEr\ngKsARMSOu61T5rlvkoicTfKrgWKGQXl9G+sO13GvM5uocF1yIRSlxEcxJS2BjSV6vL5S5zNg6Hte\noX8ZWAMcAF4wxuwXkUdF5GbPsDVAg4gUA+8CDxhjGowxvbhbO2+LyF7craInh2Mi2fY4Xv3iAj4z\nV5dcCGWFjhR2HGuio6vX6lKU8kvibyezFBQUmKKiIqvLUAHq74dquefp7TzzT3NYNHHorUKlAo2I\n7DDGFAw0LijPyFWha05OMhFhon19pc5DQ18FldjIcGZnJen6+kqdh4a+CjpOh53imlYa27qsLkUp\nv6Ohr4KO02HHGNhcqkfxKNWfhr4KOjMzRxMfFa4tHqXOQUNfBZ3wMBvzclP0zVylzkFDXwWlQkcK\nxxvbqWgc1vX9lAo4GvoqKH1wCUV9tf8PenpdvLSjUq8pHKI09FVQcoyJZ8yoKO3rn8Pv3ivlmy/u\n5pqfv8cL2yv0amMhRkNfBSURodBhZ1NpAy6XhtpZB2pa+dXbR7h68hgmpyXwrZf38Jnfb+V4g7bB\nQoWGvgpaToedxrYuDpxotboUv9Dd6+KbL+5mdEwEP719Js8vncd/3DKN3RUtXPfL93hqfRm9uoMM\nehr6Kmid7etv0lU3Afh/75ayv7qV/7hlOslxkdhswmfmTWDt/Ytw5tn5jzcO8InfbuKg7iSDmoa+\nClrjRkeTlxqnfX1gf3UL//3OEW6Zlc7iaeM+9LW00TE89bkCfn3XpVQ2tnPjrzfw87cOcaZHVyoN\nRhr6KqgVOuxsO9oY0gHW1ePiX1/YTVJcJI/cfMk5x4gIN89MZ+39V3DTzHR+/U4JH/v1BnYcaxzh\natVw09BXQc3psNPR3cvO481Wl2KZ37xbwsETp/jPj08nMTbygmOT4yL5xR2zePrey+no6uW2323m\nkVX7aTvTM0LVquGmoa+C2ry8FGwSusfr76tq4fF3S/jE7AyunTrW6/tdNWkMa76xiLvnTeB/Npdz\n3S/W8fdDtcNXqBoxGvoqqCVERzAjMzEkQ/9MTy//+sJu7PGRfO/Gc7d1LiQ+KpzvL5nGS/88n+gI\nG/c8vZ37/7qLJl29NKBp6KugV+iws7uyhdbObqtLGVH//XYJh06e4r8+MZ3RsRFD/j6XTUhm9dcW\n8tWrHazaXc01P3+P13ZX60ldAUpDXwU9p8NOr8uwtSx03pTcXdHMb98r5fbLMrl6svdtnfOJCg/j\n/usm8dpXCslIiuErz+1k6TNF1LR0+KBaNZI09FXQmz0hkegIW8i0eDq7e/nmi7tJjY/i4Run+vR7\nT0lL4JV/WcC/3TCFDSX1XPfzdTy79Zie9RxANPRV0IsKD2NOTugstfyrt49wpPY0P7p1OqNjht7W\nOZ/wMBtLF+Wy5uuLmJ45mn97dR93PbmFsrrTPn8s5Xsa+iokOPNSOFJ7mpNBvrLkzuNNPPFeKXde\nPp4rJ40Z1seakBLHs1+Yy2O3Tqe4ppXFv1rPb/9eSk+va1gfV10cDX0VEkJhqeWzbZ1xCdH828em\njMhjigh3XJ7F2/dfwdWTxvDYmwdZ8vhG9lW1jMjjB4ualg6eXFfG794rHfbH0tBXIWFqWgJJsRFB\nvSTDL9YeprSujcdum8GoaN+3dS5kTEI0v/vsZfz207OpPXWGJY9v5LE3D9LZHbpnQg+kub2L57Yd\n587lm1nwo3f44eoDI3Jd5/BhfwSl/IDNJixw2NlYUo8xBhGxuiSf2nGskeXry/jU3CwW5qdaVsf1\n09NYkGfnh6uL+e3fS3lz3wl+9InpzM1Nsawmf9LR1cvbB0+yYmc17x2upbvXkGuP4+sfmcjNs9LJ\nsccNew0a+ipkOPPsvLGnhtK6Nhxj4q0ux2c6u3t54MU9pI+O4Ts3jExb50JGx0bw49tmcvPMDB56\ndQ93LN/Cp+dm8eD1k0f8LxB/0NPrYkNJPat2VbNm/wnaunoZmxDFPQuyWTIrg0vSE0b0RYiGvgoZ\nhX36+sEU+j9dc4iy+jae/cJc4qP851e6MN/Omq8v4udvHeYPG4/y9oFa/uOWaVwziOUgApUxhveP\nN7NqVxWv76mhoa2LhOhwbpqZzs2z0pmbk0KYzZq/Nr16hojIYuBXQBjwlDHmR+cY80ngEcAAu40x\nn+rztQTgAPCqMebLPqhbqUHLSollfHIMG0rq+dyCbKvL8Ynt5Y38fuNRPjtvwgdvVvuT2MhwHr5x\nKjfOTOfbL+3hC88UcdPMdL5301Ts8VFWl+dzh0+eYuWuKlbuqqayqYOocBvXTBnLzbPSuXJSKlHh\nYVaXOHDoi0gY8DhwLVAJbBeRVcaY4j5j8oGHAKcxpklE+h8r9gPgPd+VrdTQFDrsvL67hp5eF+Fh\ngX0cQ0dXLw+8uJvMpBgevH6y1eVc0Kzxibz2lUJ+914pv3mnhA1H6vj3G6fy8UszAv79larmDl7b\nXc3KXdUcqGnFJlCYn8o3rpnIdZeM9buWljev9OcAJcaYMgAReR5YAhT3GbMUeNwY0wRgjPlgOT4R\nuQwYC7wJFPiobqWGxOmw89y2CvZUtTA7K8nqci7Kj9ccpLyhneeWziPOj9o65xMZbuOrH8nn+mnj\n+PbLe7j/hd2s3FXNDz8+jcykWKvLG5Smti7e2FvDql3VbCt3L+9xaVYij9w0lY/NSCd1lP/+FePN\nMyUDqOhzuxKY22/MRAAR2Yi7BfSIMeZNEbEBPwM+C3zkfA8gIsuAZQBZWVleF6/UYM33HEWyqaQ+\noEN/S1kDT28s554F2czPC6wjY/LHjuLFf17AnzaX8+M1h7juF+v41kcncff8bGwW9bm90d7Vw9ri\nk6zaVc17h+vocRkcY+L55nUTuXlmBlkpgbHj8ib0z/VT6L/QRjiQD1wJZALrRWQa8BlgtTGm4kJ/\nwhljlgPLAQoKCnQRDzVsUuKjmJqWwIaSer58db7V5QxJe1cP33ppDxNSYvnW4klWlzMkYTbhHmcO\n10wdy7+9uo9HXivmtT01PHbrdBxjRlld3ge6e11sOFLPil1VvLX/JB3dvaSNjubzhTksmZXBlLRR\nAdee8ib0K4HxfW5nAtXnGLPFGNMNHBWRQ7h3AvOBhSLyRSAeiBSR08aYBy++dKWGpjDfzh83ltPe\n1UNspP+3Rfp77G8HqWhq56/L5gdk/X1lJsXyx3sv59WdVTz6ejE3/GoDX7nawX1X5BEZbs17Li6X\nYcfxJlbuquKNPTU0tXeTGBvBx2dnsGRmOpdnJ/v1XyQD8eYZsx3IF5EcoAq4E/hUvzErgLuAP4qI\nHXe7p8wY8+mzA0TkHqBAA19Zzemws3xdGdvLm7hionUnMg3FptJ6/mfzMf7JmcOcnGSry/EJEeET\nszNZNDGVR1bt52drD/PG3hoeu3UGM8cnjlgdB0+0snJXNat2VVPV3EF0hI1rp45jycx0Fk1MtWwn\n5GsDhr4xpkdEvgyswd2v/4MxZr+IPAoUGWNWeb52nYgUA73AA8aY4T+fWKkhuDw7icgw91LLgRT6\nbWfcbZ0cexwPfDQw2zoXYo+P4jefms0ts07y8Ip9fPz/beTzhTncf+0kYiKH51DHisZ2Vu12B/2h\nk6cIswkL8+088NFJXDt1bEC8QT5Y4m9XvykoKDBFRUVWl6GC3B1PbOb0mR7e+OpCq0vx2sMr9vLs\n1uO8eN98CrKD41X++bR2dvPY3w7y7NbjZCXH8qNPTGeBj85DaDh9htV7a1i5q5qiY00AFExIYsms\ndG6YnkZKgJ4/ICI7jDEDHiEEI298AAANuUlEQVQZfLsxpbxQ6LDzs7WHaWzrIjku0upyBrThSD1/\n3nKcpQtzgj7wwX1t4x9+fDo3zUznoVf28qmntnJHwXi+c8OUIV36se1MD28Vn2DlrmrWH6mn12WY\nNHYU31o8iZtmpDM+OTCOvPEFDX0Vkpz57tDfVFrPjTPSrS7ngk51dvPtl/eQmxrHv14XfG2dC5mX\nm8LfvraQX719hOXrynjnUC0/WHIJi6elDXjfrh4X6w7XsXJ3NWuLT9DZ7SIjMYZli3JZMiudyeMS\nRmAG/kdDX4WkGRmjGRUVzsYS/w/9/1x9kJqWDl76lwVER1h/Gv9Ii44I49uLJ/Ox6Wl8++U9/POf\n3+f6aeP4/pJLGDMq+kNjXS7D9vJGVuyqZvXeGlo6ukmKjeC2yzK5ZVYGs7OSAvrIG1/Q0FchKTzM\nxtzcFDaW+PfxBusO1/HctuPcd0VuQJ9M5gvTMkaz4ktOnlp/lF/872E2ltTz8MemcntBJsU1raza\nVc2q3dXUtHQSGxnGdVPHsmRWBoX5diICfMkNX9LQVyGr0JHC/x44yfGGdr88m7LV09ZxjInnG9dM\ntLocvxARZuNfrszjo5eM5cFX9vKtl/fw4zUHqT/dRbhNuGJiKg9eP5lrp44N+HMYhov+r6iQVZjv\nWWq5tJ6sFP9b/uOHrx/gZGsnr3zRGZJtnQvJTY3n+aXzeG77cf5+qI4rJ6Vyw7Q0kgLgTXmraeir\nkJWXGs/YhCg2lNRz1xz/Cv13D9Xy16IKvnhlHrNG8ASlQGKzCZ+eO4FPz51gdSkBRRtdKmSJCE6H\nnU0l9bhc/nO+SktHNw++vIeJY+P52jWBuT6Q8l8a+iqkOfPsNLV3c+BEq9WlfOAHrxdTf7qLn94+\n0y8uuqGCi4a+CmnOPpdQ9AdvHzjJSzsq+eKVeczI1LaO8j0NfRXSxo2OxjEmng1+cOhmS3s3D72y\nl8njRvGVAF32Wfk/DX0V8goddrYdbeBMT6+ldXz/tf00trnbOsGyoqPyP/rMUiHP6bDT2e3i/WPN\nltXw1v4TvLKzii9d5WBaxmjL6lDBT0Nfhby5ucnYxL1WvRWa2rr4zqv7mJKWwJeuclhSgwodGvoq\n5CVERzBzfCIbLHoz95HX9tPc3sXPtK2jRoA+w5TC3dffXdFMa2f3iD7um/vc67p/9SP5TE0PzVUf\n1cjS0FcKd1/fZWBL6cgdxdPY1sXDK/YxLSOBf7kyb8QeV4U2DX2lgEuzEomOsLFpBEP/uyv30dLR\nzU9vn6mrQKoRo880pYCo8DDm5KSMWF//jT01vL6nhq9fMzFkL+ahrKGhr5RHoSOFktrTnGjpHNbH\nqT99hn9fuY8ZmaO5b1HusD6WUv1p6CvlMRJLMhhj+PcV+zjd2cNPb59JuLZ11AjTZ5xSHlPGJZAc\nFzmsof/6nhr+tu8E37h2IhPHjhq2x1HqfDT0lfKw2YT5eSlsLK3HGN8vtVx36gzfXbmPmeMTWbow\nx+ffXylvaOgr1Uehw87J1jOU1p326fc1xvDwir20dfXys9tnaFtHWUafeUr1Uejp62844tsWz6rd\n1azZf5JvXjcRxxht6yjraOgr1cf45FiykmN9utRybWsn3125n9lZiXy+UI/WUdbyKvRFZLGIHBKR\nEhF58DxjPikixSKyX0T+4tk2S0Q2e7btEZE7fFm8UsPB6bCztayBnl7XRX8vYwzfeXUvnd29/OT2\nmYTZxAcVKjV0A4a+iIQBjwPXA1OBu0Rkar8x+cBDgNMYcwnwdc+X2oG7PdsWA78UEb0ckPJrTkcK\np870sKeq5aK/16s7q/jfA7U88NFJ5KXG+6A6pS6ON6/05wAlxpgyY0wX8DywpN+YpcDjxpgmAGNM\nreffw8aYI57Pq4FaINVXxSs1HBbkeY7Xv8i+/snWTh5ZtZ+CCUnc69SjdZR/8Cb0M4CKPrcrPdv6\nmghMFJGNIrJFRBb3/yYiMgeIBEqHWqxSIyE5LpJL0hMuakkGYwwPvbKXrl6XtnWUX/Em9M/1bO1/\nEHM4kA9cCdwFPNW3jSMiacCfgHuNMf/QKBWRZSJSJCJFdXV13tau1LApdNh5/3gT7V09Q7r/Szsq\needgLd9ePJkce5yPq1Nq6LwJ/UpgfJ/bmUD1OcasNMZ0G2OOAodw7wQQkQTgDeBhY8yWcz2AMWa5\nMabAGFOQmqrdH2U9p8NOd69he3nToO9b09LBo68VMycnmc/Nz/Z9cUpdBG9CfzuQLyI5IhIJ3Ams\n6jdmBXAVgIjYcbd7yjzjXwWeMca86LuylRpel2cnExlmG/SSDMYYHnx5Lz0uw09um4FN2zrKzwwY\n+saYHuDLwBrgAPCCMWa/iDwqIjd7hq0BGkSkGHgXeMAY0wB8ElgE3CMiuzwfs4ZlJkr5UExkGLMn\nJA76JK0Xiip473AdD90wmQkp2tZR/ifcm0HGmNXA6n7bvtvncwPc7/noO+bPwJ8vvkylRl6hw85P\n3zpMw+kzpMRHDTi+qrmDH7x+gHm5yXxm7oQRqFCpwdMzcpU6j7NLLXtzNS13W2cPLmP4yW0zta2j\n/JaGvlLnMT1jNKOiwtlUOnCL57ltFaw/Us93bpjC+OTYEahOqaHR0FfqPMLDbMzLG/gSihWN7fzw\njWKcjhQ+PTdrhKpTamg09JW6gEKHnYrGDo43tJ/z6y6X4dsv7wHgsVtnIKJtHeXfNPSVuoCzff3z\nvdp/dttxNpU28PCNU8lM0raO8n8a+kpdQF5qHOMSos95vH5FYzv/tfoAC/Pt3Hn5+HPcWyn/o6Gv\n1AWICAscKWwqrcfl+r/VR1wuwwMv7SZMRNs6KqBo6Cs1gEKHnab2boprWj/Y9qctx9hS1sjDN04h\nPTHGwuqUGhwNfaUGcLavf7bFc6yhjR/97SBXTEzlkwXa1lGBRUNfqQGMTYgmf0w8G0rcLZ4HXtxD\neJjwo1una1tHBRwNfaW84HTY2V7eyPL1ZWwrb+S7N04lbbS2dVTg0dBXygtOh53Obhc/+ttBrp48\nhtsuy7S6JKWGxKsF15QKdXNzkwmzCXGRYfzXJ7StowKXhr5SXkiIjuA7N0whf0w8YxOirS5HqSHT\n0FfKS58v1Iubq8CnPX2llAohGvpKKRVCNPSVUiqEaOgrpVQI0dBXSqkQoqGvlFIhRENfKaVCiIa+\nUkqFEDHGDDxqBIlIHXDsIr6FHbjwlawDQ7DMA3Qu/ipY5hIs84CLm8sEY0zqQIP8LvQvlogUGWMK\nrK7jYgXLPEDn4q+CZS7BMg8Ymbloe0cppUKIhr5SSoWQYAz95VYX4CPBMg/QufirYJlLsMwDRmAu\nQdfTV0opdX7B+EpfKaXUeQRs6IvIeBF5V0QOiMh+EfmaZ3uyiKwVkSOef5OsrnUgIhItIttEZLdn\nLt/3bM8Rka2eufxVRCKtrtUbIhImIjtF5HXP7UCdR7mI7BWRXSJS5NkWcM8vABFJFJGXROSg53dm\nfiDORUQmeX4eZz9aReTrATqXb3h+3/eJyHOeHBj235WADX2gB/hXY8wUYB7wJRGZCjwIvG2MyQfe\n9tz2d2eAq40xM4FZwGIRmQc8BvzCM5cm4PMW1jgYXwMO9LkdqPMAuMoYM6vPYXSB+PwC+BXwpjFm\nMjAT988n4OZijDnk+XnMAi4D2oFXCbC5iEgG8FWgwBgzDQgD7mQkfleMMUHxAawErgUOAWmebWnA\nIatrG+Q8YoH3gbm4T9II92yfD6yxuj4v6s/E/Ut3NfA6IIE4D0+t5YC937aAe34BCcBRPO/hBfJc\n+tV/HbAxEOcCZAAVQDLuKxi+Dnx0JH5XAvmV/gdEJBu4FNgKjDXG1AB4/h1jXWXe87REdgG1wFqg\nFGg2xvR4hlTifqL4u18C3wJcntspBOY8AAzwlojsEJFlnm2B+PzKBeqApz1tt6dEJI7AnEtfdwLP\neT4PqLkYY6qAnwLHgRqgBdjBCPyuBHzoi0g88DLwdWNMq9X1DJUxpte4/2TNBOYAU841bGSrGhwR\nuRGoNcbs6Lv5HEP9eh59OI0xs4HrcbcPF1ld0BCFA7OB3xpjLgXa8PP2x0A8ve6bgRetrmUoPO85\nLAFygHQgDvfzrD+f/64EdOiLSATuwH/WGPOKZ/NJEUnzfD0N9yvngGGMaQb+jvt9ikQROXvx+kyg\n2qq6vOQEbhaRcuB53C2eXxJ48wDAGFPt+bcWd994DoH5/KoEKo0xWz23X8K9EwjEuZx1PfC+Meak\n53agzeUa4Kgxps4Y0w28AixgBH5XAjb0RUSA3wMHjDE/7/OlVcDnPJ9/Dnev36+JSKqIJHo+j8H9\nhDgAvAvc5hnm93MxxjxkjMk0xmTj/tP7HWPMpwmweQCISJyIjDr7Oe7+8T4C8PlljDkBVIjIJM+m\njwDFBOBc+riL/2vtQODN5TgwT0RiPVl29mcy7L8rAXtylogUAuuBvfxf//g7uPv6LwBZuP9jbzfG\nNFpSpJdEZAbwP7jfwbcBLxhjHhWRXNyvmJOBncBnjDFnrKvUeyJyJfBNY8yNgTgPT82vem6GA38x\nxvxQRFIIsOcXgIjMAp4CIoEy4F48zzUCby6xuN8EzTXGtHi2BdzPxXNo9h24j0TcCXwBdw9/WH9X\nAjb0lVJKDV7AtneUUkoNnoa+UkqFEA19pZQKIRr6SikVQjT0lVIqhGjoK6VUCNHQV0qpEKKhr5RS\nIeT/A/tAUATXodPEAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc1be2e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘画SH评分模型\n",
    "plt.plot(Ks,np.array(SH_score))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以轮廓系数来评分的话，当K取30时效果最好，比较之后我选择K=30"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#再训练一次\n",
    "n_clusters = 30\n",
    "mb_kmeans = MiniBatchKMeans(n_clusters = n_clusters)\n",
    "mb_kmeans.fit(df_FE.values) #训练全部数据，这次\n",
    "\n",
    "y_train_pred = mb_kmeans.predict(df_FE.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 保存结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df_FE['cluster_30']=y_train_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df_FE.to_csv('users_FE.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>LocaleId</th>\n",
       "      <th>BirthYearInt</th>\n",
       "      <th>GenderId</th>\n",
       "      <th>JoinedYearMonth</th>\n",
       "      <th>TimezoneInt</th>\n",
       "      <th>cluster_50</th>\n",
       "      <th>cluster_30</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000036</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000016</td>\n",
       "      <td>11</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.000042</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000018</td>\n",
       "      <td>25</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000018</td>\n",
       "      <td>11</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000025</td>\n",
       "      <td>-0.000022</td>\n",
       "      <td>7</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.000029</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000025</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>31</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000020</td>\n",
       "      <td>33</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000022</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>7</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000018</td>\n",
       "      <td>11</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>-0.000022</td>\n",
       "      <td>22</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000023</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>-0.000022</td>\n",
       "      <td>22</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>-0.000036</td>\n",
       "      <td>13</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000036</td>\n",
       "      <td>1</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000038</td>\n",
       "      <td>1</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>0.000024</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000004</td>\n",
       "      <td>29</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>0.000035</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000022</td>\n",
       "      <td>22</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000022</td>\n",
       "      <td>30</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>79</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>-0.000022</td>\n",
       "      <td>35</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000013</td>\n",
       "      <td>18</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>81</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000022</td>\n",
       "      <td>32</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>82</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>83</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000031</td>\n",
       "      <td>26</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>0.000029</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000004</td>\n",
       "      <td>25</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>0.000042</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000013</td>\n",
       "      <td>25</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000024</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>91</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>92</th>\n",
       "      <td>0.000024</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000022</td>\n",
       "      <td>32</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>93</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000018</td>\n",
       "      <td>10</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>94</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000024</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>-0.000022</td>\n",
       "      <td>32</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000018</td>\n",
       "      <td>11</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>18</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000027</td>\n",
       "      <td>35</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    LocaleId  BirthYearInt  GenderId  JoinedYearMonth  TimezoneInt  \\\n",
       "0   0.000036      0.000027  0.000019         0.000026     0.000036   \n",
       "1   0.000036      0.000027  0.000019         0.000026     0.000031   \n",
       "2   0.000020      0.000027  0.000019         0.000026    -0.000018   \n",
       "3   0.000020      0.000027  0.000038         0.000027     0.000016   \n",
       "4   0.000036      0.000027  0.000038         0.000026     0.000031   \n",
       "5   0.000042      0.000027  0.000038         0.000027     0.000018   \n",
       "6   0.000036      0.000027  0.000019         0.000026     0.000031   \n",
       "7   0.000036      0.000027  0.000038         0.000026     0.000031   \n",
       "8   0.000036      0.000027  0.000019         0.000026     0.000031   \n",
       "9   0.000036      0.000027  0.000038         0.000026     0.000031   \n",
       "10  0.000020      0.000027  0.000019         0.000026     0.000031   \n",
       "11  0.000020      0.000027  0.000038         0.000026     0.000031   \n",
       "12  0.000036      0.000027  0.000038         0.000026     0.000031   \n",
       "13  0.000020      0.000027  0.000038         0.000026     0.000018   \n",
       "14  0.000000      0.000000  0.000019         0.000025    -0.000022   \n",
       "15  0.000029      0.000027  0.000019         0.000026    -0.000018   \n",
       "16  0.000000      0.000027  0.000019         0.000025    -0.000018   \n",
       "17  0.000036      0.000027  0.000019         0.000026     0.000031   \n",
       "18  0.000036      0.000027  0.000019         0.000026     0.000020   \n",
       "19  0.000020      0.000000  0.000019         0.000022    -0.000018   \n",
       "20  0.000036      0.000027  0.000019         0.000026     0.000031   \n",
       "21  0.000019      0.000027  0.000038         0.000026     0.000018   \n",
       "22  0.000020      0.000027  0.000019         0.000026     0.000031   \n",
       "23  0.000020      0.000027  0.000038         0.000026     0.000031   \n",
       "24  0.000036      0.000027  0.000019         0.000027    -0.000022   \n",
       "25  0.000020      0.000027  0.000019         0.000023    -0.000018   \n",
       "26  0.000036      0.000027  0.000019         0.000027    -0.000022   \n",
       "27  0.000020      0.000027  0.000038         0.000026    -0.000018   \n",
       "28  0.000020      0.000027  0.000038         0.000026     0.000031   \n",
       "29  0.000020      0.000027  0.000019         0.000027    -0.000036   \n",
       "..       ...           ...       ...              ...          ...   \n",
       "70  0.000036      0.000027  0.000038         0.000027     0.000031   \n",
       "71  0.000020      0.000027  0.000019         0.000026    -0.000036   \n",
       "72  0.000027      0.000027  0.000019         0.000026    -0.000038   \n",
       "73  0.000036      0.000027  0.000038         0.000026     0.000031   \n",
       "74  0.000024      0.000027  0.000019         0.000027     0.000004   \n",
       "75  0.000035      0.000027  0.000019         0.000026    -0.000022   \n",
       "76  0.000020      0.000027  0.000019         0.000026     0.000031   \n",
       "77  0.000020      0.000027  0.000019         0.000027     0.000022   \n",
       "78  0.000020      0.000027  0.000019         0.000027     0.000031   \n",
       "79  0.000020      0.000027  0.000038         0.000027    -0.000022   \n",
       "80  0.000000      0.000027  0.000038         0.000026    -0.000013   \n",
       "81  0.000020      0.000027  0.000019         0.000026    -0.000022   \n",
       "82  0.000036      0.000027  0.000019         0.000026     0.000031   \n",
       "83  0.000036      0.000027  0.000019         0.000027     0.000031   \n",
       "84  0.000020      0.000027  0.000019         0.000026     0.000031   \n",
       "85  0.000020      0.000027  0.000019         0.000026    -0.000031   \n",
       "86  0.000029      0.000027  0.000038         0.000027     0.000004   \n",
       "87  0.000042      0.000027  0.000038         0.000026     0.000013   \n",
       "88  0.000020      0.000027  0.000038         0.000026    -0.000018   \n",
       "89  0.000036      0.000027  0.000019         0.000026     0.000031   \n",
       "90  0.000020      0.000027  0.000038         0.000024    -0.000018   \n",
       "91  0.000036      0.000027  0.000019         0.000027     0.000031   \n",
       "92  0.000024      0.000027  0.000019         0.000026    -0.000022   \n",
       "93  0.000020      0.000027  0.000019         0.000026     0.000018   \n",
       "94  0.000020      0.000027  0.000038         0.000024    -0.000018   \n",
       "95  0.000036      0.000027  0.000019         0.000026     0.000031   \n",
       "96  0.000020      0.000027  0.000019         0.000027    -0.000022   \n",
       "97  0.000020      0.000027  0.000038         0.000027     0.000018   \n",
       "98  0.000000      0.000027  0.000038         0.000026    -0.000018   \n",
       "99  0.000020      0.000027  0.000038         0.000026    -0.000027   \n",
       "\n",
       "    cluster_50  cluster_30  \n",
       "0            0           0  \n",
       "1            0           0  \n",
       "2            9           2  \n",
       "3           11          23  \n",
       "4            3           4  \n",
       "5           25          27  \n",
       "6            0           0  \n",
       "7            3           4  \n",
       "8            0           0  \n",
       "9            3           4  \n",
       "10           2          14  \n",
       "11           6           7  \n",
       "12           3           4  \n",
       "13          11          23  \n",
       "14           7          25  \n",
       "15           9           2  \n",
       "16          31          11  \n",
       "17           0           0  \n",
       "18          33          20  \n",
       "19           7          25  \n",
       "20           0           0  \n",
       "21          11          23  \n",
       "22           2          14  \n",
       "23           6           7  \n",
       "24          22          13  \n",
       "25           9           2  \n",
       "26          22          13  \n",
       "27          12           6  \n",
       "28           6           7  \n",
       "29          13          17  \n",
       "..         ...         ...  \n",
       "70           3           4  \n",
       "71           1          19  \n",
       "72           1          19  \n",
       "73           3           4  \n",
       "74          29           1  \n",
       "75          22          13  \n",
       "76           2          14  \n",
       "77          30          29  \n",
       "78           2          14  \n",
       "79          35          24  \n",
       "80          18           3  \n",
       "81          32          11  \n",
       "82           0           0  \n",
       "83           0           0  \n",
       "84           2          14  \n",
       "85          26          12  \n",
       "86          25          27  \n",
       "87          25          27  \n",
       "88          12           6  \n",
       "89           0           0  \n",
       "90          12           6  \n",
       "91           0           0  \n",
       "92          32          11  \n",
       "93          10          16  \n",
       "94          12           6  \n",
       "95           0           0  \n",
       "96          32          11  \n",
       "97          11          23  \n",
       "98          18           3  \n",
       "99          35          24  \n",
       "\n",
       "[100 rows x 7 columns]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_FE.head(100)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
